package com.edu.lxshpc.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.edu.lxshpc.dto.UserDto;
import com.edu.lxshpc.pojo.SysPermission;
import com.edu.lxshpc.pojo.SysRole;
import com.edu.lxshpc.pojo.User;
import com.edu.lxshpc.povo.UserVO;
import com.edu.lxshpc.utils.Result;
import org.springframework.security.core.GrantedAuthority;

import java.util.ArrayList;
import java.util.List;

/**
* @author Sanshan
* @description 针对表【user】的数据库操作Service
* @createDate 2023-10-27 09:57:01
*/
public interface UserService extends IService<User> {
    /**
     * 用户注册
     * @param user
     * @param code
     * @return
     */
    Result insertUser(User user, String code);

    /**
     * 用户登录
     * @param username 用户名
     * @return 返回token信息
     */
    Result userLoginByUsername(User username);

    /**
     * 查询用户信息
     * @param username 用户名
     * @return user类
     */
    User queryByUsername(String username);

    /**
     * 根据用户id查询用户角色
     * @param id 用户id
     * @return
     */
    List<SysRole> getUserRoleById(Long id);
    /**
     * 根据用id查询角色权限
     * @param sysRoles 用户角色信息
     * @return
     */
    List<SysPermission> getUserPermissionsByRoleId(List<SysRole> sysRoles);

    /**
     * 获得用户权限集合
     * @param user 参数
     * @return
     */
    ArrayList<GrantedAuthority> getGrantedAuthorities(User user);

    /**
     * 根据用户id查询用户信息
     * @param userId 用户id
     * @return 用户信息
     */
    Result getUserById(Long userId);
    /**
     * 更新用户信息
     * @param userVO 用户信息
     * @return 业务结果
     */
    Result updateUserById(UserVO userVO);
    /**
     * 更新用户密码
     * @param userDto 用户信息
     * @return 返回用户信息
     */
    Result updatePasswordById(UserDto userDto);
}
